/*实现功能：
1.时间的存档与排名的更新
2.第一次点到地雷换位置增加可玩性 


三维[0]的含义：本质态
0-->地面
1-->地雷
3-->已揭开地面
三维[1]的含义：表示态
0-->地面
1-->揭开的地面
2-->旗子
3-->问号
4-->揭开的地雷
5-->半开
10~18-->揭开的地面数字
三维[2]的含义：切换工具
0-->不在此状态
1-->已在此状态
三维[3]的作用：标记防止反复扫描 
三维[4]的作用：记录已揭开的地面
*/
#include <graphics.h>
#include<string.h>
#include<math.h>
#include<time.h>
#include <conio.h>
#include<stdio.h>
#define pi 3.141593
#define WIDTH 800
#define HEIGHT 600
#define brick 40 //15*15
int minenum;//雷数
int restmines;	//剩余地雷
int thetime;//时间
int flagnum;//旗数
int steps = 0;//记录点击次数
clock_t start; // 记录第一次运行时刻
MOUSEMSG hit;//记录鼠标信息
int whatoption = 0;	//在哪个选择页面
int land[15][15][5];//三维数组存储坐标和显示信息
void option();
void rankinglook();
void startup();
void rankingreset()//重置排名信息
{
	FILE* fp = NULL;//打开文件 
	fopen_s(&fp,"rank.txt", "w");//只写
	fprintf(fp, "0\n0\n0\n");//存入初始数据0
	fclose(fp);//关闭文件
}
void drawkey(int x, int y, int l, int w)//绘制按键
{
	int p = w / 10;//内外边距
	setlinecolor(BLACK);//设置线条颜色
	setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 1);//线条格式
	setfillcolor(RGB(193, 255, 193));//设置填充颜色
	POINT pts1[] = { {x,y},{x + l,y},{x,y + w} };//左上三角形
	fillpolygon(pts1, 3);
	setfillcolor(RGB(69, 139, 116));//设置填充颜色
	POINT pts2[] = { {x + l,y},{x,y + w},{x + l,y + w} };//右下三角形
	fillpolygon(pts2, 3);
	setfillcolor(RGB(102, 205, 170));//中部矩形
	solidrectangle(p + x, p + y, x + l - p, y + w - p);
}
void updaterank(int a)//排名更新函数 
{
	int i, j, k;
	char b[3][5];//用于存储读取的排名信息 
	int c[3] = { 0,0,0 };//把b转换为int型 
	FILE* fp = NULL;//打开文件 
	fopen_s(&fp,"rank.txt", "r");//只读
	fscanf_s(fp, "%s%s%s", b[0], b[1], b[2]);//已记录信息读取到b[]
	for (i = 0; i < 3; i++)//把字符型b[]转化为int c[]
	{
		j = 0;
		k = strlen(b[i]);
		while (b[i][j] != 0)
		{
			c[i] += (b[i][j] - '0') * (int)pow(10.0, (double)(k - j - 1));
			j++;
		}
	}
	for (i = 0; i < 3; i++)//比较时间长短 
	{
		if (a < c[i] || c[i] == 0)
		{
			c[i] = a;
			break;
		}
	}
	fopen_s(&fp,"rank.txt", "w");//只写
	fprintf(fp, "%d\n%d\n%d\n", c[0], c[1], c[2]);//存入更新后的数据	
	fclose(fp);
}
void rankinglook()
{
	int i, j, k;
	char b[3][5];//用于存储读取的排名信息 
	int c[3] = { 0,0,0 };//把b转换为int型 
	FILE* fp = NULL;//打开文件 
	fopen_s(&fp,"rank.txt", "r");//只读
	fscanf_s(fp, "%s%s%s", b[0], b[1], b[2]);//读取记录信息
	for (i = 0; i < 3; i++)//把字符型转化为int 
	{
		j = 0;
		k = strlen(b[i]);
		while (b[i][j] != 0)
		{
			c[i] += (b[i][j] - '0') * (int)pow(10.0, (double)(k - j - 1));
			j++;
		}
	}
	fclose(fp);//关闭文件
	cleardevice();//清屏
	loadimage(NULL, _T("rankingpicture.png"), 400, 300);//获取图片
	setfillcolor(RGB(127, 255, 212));//填充颜色
	solidrectangle(400, 0, 800, 600);//无边框方块
	solidrectangle(0, 300, 400, 600);
	setfillcolor(RGB(0, 245, 255));//格子颜色
	fillrectangle(320, 200, 460, 240);	//有边框方块
	fillrectangle(320, 250, 460, 290);
	fillrectangle(320, 300, 460, 340);
	settextcolor(BLACK);//字体颜色
	setbkmode(TRANSPARENT);	//透明字体
	for (i = 0; i < 3; i++)
	{
		settextstyle(60, 0, _T("Consolas"));//字体格式
		TCHAR s[5];
		swprintf_s(s, _T("%d"), i + 1);
		outtextxy(220, 190 + 50 * i, _T("NO :"));
		settextstyle(50, 0, _T("Consolas"));//字体格式
		outtextxy(280, 200 + 50 * i, s);
	}
	settextstyle(50, 0, _T("Consolas"));//字体格式
	for (i = 0; i < 3; i++)
	{
		if (c[i] != 0)
		{
			TCHAR s[5];
			swprintf_s(s, _T("%d"), c[i]);
			outtextxy(350, 195 + 50 * i, s);
			outtextxy(430, 195 + 50 * i, _T("s"));
		}
		else
			outtextxy(350, 195 + 50 * i, _T("none"));
	}
	settextstyle(40, 0, _T("Consolas"));//字体格式
	drawkey(200, 450, 100, 40);
	outtextxy(210, 448, _T("home"));
	drawkey(400, 450, 100, 40);
	outtextxy(400, 448, _T("reset"));
	while (1)//循环获取鼠标信息
	{
		hit = GetMouseMsg();//获取鼠标信息
		if (hit.mkLButton)//左键
		{
			if (hit.x >= 200 && hit.x <= 300 && hit.y >= 450 && hit.y <= 490)//位置
				startup();//回主页
			else if (hit.x >= 400 && hit.x <= 500 && hit.y >= 450 && hit.y <= 490)
			{
				rankingreset();//重置数据
				rankinglook();//刷新界面
			}
		}
	}
}
void drawflag(int i, int j)//画旗
{
	int x, y;
	x = (j * brick + (j + 1) * brick) / 2;
	y = (i * brick + (i + 1) * brick) / 2;
	setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 4);
	setlinecolor(WHITE);//线条颜色
	ellipse(x - brick / 2 + 8, y + 5, x + brick / 2 - 8, y + brick / 2 - 5);
	line(x, y + brick / 2 - 5, x, y - brick / 2);
	setfillcolor(RED);//填充颜色
	solidrectangle(x, y - brick / 2 + 3, x + brick / 2 - 3, y - 3);
}
void drawrectangle(int x, int y)//画地面
{
	int p = brick / 10;
	setlinecolor(BLACK);//设置线条颜色
	setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 1);//线条格式
	setfillcolor(RGB(193, 255, 193));//设置填充颜色
	POINT pts1[] = { {brick * y,brick * x},
					{brick * y + brick,brick * x},
					{brick * y,brick * x + brick} };
	fillpolygon(pts1, 3);
	setfillcolor(RGB(69, 139, 116));//填充颜色
	POINT pts2[] = { {brick * y,brick * x + brick},
					{brick * y + brick,brick * x},
					{brick * y + brick,brick * x + brick} };
	fillpolygon(pts2, 3);
	setfillcolor(RGB(102, 205, 170));//填充颜色
	solidrectangle(p + brick * y, p + brick * x, brick - p + brick * y, brick - p + brick * x);
}
void drawlow(int x, int y, int p)//画揭开的地面
{
	setlinecolor(BLACK);
	setfillcolor(RGB(144, 238, 144));//填充颜色
	fillrectangle(brick * y, brick * x, brick + brick * y, brick + brick * x);
	if (p != 10 && p != 0)//当p=10时无数字
	{
		TCHAR p0[10];
		settextstyle(40, 0, _T("Consolas"));
		settextcolor(BLACK);//文字颜色黑色
		swprintf_s(p0, _T("%d"), p - 10);
		outtextxy(12 + y * brick, 0 + x * brick, p0);
	}
}
void drawmenu()//画菜单
{
	setlinecolor(BLACK);
	setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 1);//线条格式
	setfillcolor(RGB(139, 137, 137));//按键颜色
	fillrectangle(650, 100, 760, 140);//时间表
	fillrectangle(650, 200, 760, 240);//第一个键	重新开始
	fillrectangle(650, 300, 760, 340);//回主页
	fillrectangle(650, 450, 760, 490);//地雷个数
	settextcolor(RGB(238, 64, 0));//设置文字颜色
	setbkmode(TRANSPARENT);	//透明字体
	settextstyle(35, 0, _T("Consolas"));//字体格式
	settextcolor(RGB(0, 134, 139));//字体颜色
	outtextxy(650, 50, _T("time:"));//时间显示
	outtextxy(650, 200, _T("restart"));//重新开始
	outtextxy(660, 300, _T("home"));//主页
	outtextxy(610, 400, _T("rest mines:"));	//剩余的地雷显示
	settextcolor(RED);//文字颜色
	TCHAR s1[5];
	swprintf_s(s1, _T("%d"), thetime);// 输出时间
	outtextxy(680, 100, s1);
	TCHAR s2[5];
	swprintf_s(s2, _T("%d"), restmines);// 输出余雷数
	outtextxy(680, 450, s2);
}
void updatemenu()//更新菜单
{
	setlinecolor(BLACK);
	setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 1);//设置线条格式
	setfillcolor(RGB(139, 137, 137));//按键颜色
	fillrectangle(650, 100, 760, 140);//时间表
	fillrectangle(650, 450, 760, 490);//地雷表
	setbkmode(TRANSPARENT);//透明字体
	settextcolor(RED);//设置字体颜色
	settextstyle(35, 0, _T("Consolas"));//设置字体格式
	TCHAR s1[5];
	swprintf_s(s1, _T("%d"), thetime);// 输出时间
	outtextxy(680, 100, s1);
	TCHAR s2[5];
	swprintf_s(s2, _T("%d"), restmines);	// 输出余雷
	outtextxy(680, 450, s2);
}
void drawque(int i, int j)//绘制问号
{
	TCHAR p0[10];
	settextstyle(40, 0, _T("Consolas"));
	settextcolor(BLACK);//颜色
	swprintf_s(p0, _T("%c"), '?');
	outtextxy(12 + j * brick, 0 + i * brick, p0);
}
void drawplaypage()//绘制游戏界面
{
	setbkcolor(RGB(255, 255, 240));//背景色
	setlinecolor(BLACK);//线条颜色
	setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 5);//线条格式
	rectangle(0, 0, 600, 600);//游戏区域
	for (int i = 0; i < 15; i++)
	{
		for (int j = 0; j < 15; j++)
			drawrectangle(i, j);//小方块
	}
	drawmenu();//画菜单
}
void drawbomb(int i, int j)//绘制按到的炸弹
{
	int x, y, r;
	x = (j * brick + (j + 1) * brick) / 2;
	y = (i * brick + (i + 1) * brick) / 2;
	r = brick / 5;
	setfillcolor(BLACK);//填充颜色
	fillcircle(x, y, r);
	setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 1);
	fillpie(x - brick / 2, y - brick, x + brick / 2, y, pi * 3 / 2 - pi / 40, pi * 3 / 2 + pi / 40);
	fillpie(x - brick / 2, y, x + brick / 2, y + brick, pi / 2 - pi / 40, pi / 2 + pi / 40);
	fillpie(x - brick, y - brick / 2, x, y + brick / 2, -pi / 40, pi / 40);
	fillpie(x, y - brick / 2, x + brick, y + brick / 2, pi - pi / 40, pi + pi / 40);
}
void bomb()
{
	for (int i = 0; i < 15; i++)
	{
		for (int j = 0; j < 15; j++)
		{
			if (land[i][j][0] == 1)
			{
				Sleep(30);			//逐个显示效果
				drawbomb(i, j);
			}
		}
	}
}
void scanaround(int land[15][15][5], int i, int j)//扫描四周
{
	land[i][j][3] = 1;//做标记防止反复扫描
	int q, w, e, a, d, z, x, c;//描述周围的点有无雷(对应键盘位置)
	int t = 0;//t记录周围地雷数目
	q = w = e = a = d = z = x = c = 0;//初始无
	if (i - 1 >= 0)//扫描上方
	{
		if (j - 1 >= 0)
		{
			if (land[i - 1][j - 1][0] == 0)
				q = 1;
			else if (land[i - 1][j - 1][0] == 1)
				t++;
		}
		if (land[i - 1][j][0] == 0)
			w = 1;
		else if (land[i - 1][j][0] == 1)
			t++;
		if (j + 1 < 15)
			if (land[i - 1][j + 1][0] == 0)
				e = 1;
			else if (land[i - 1][j + 1][0] == 1)
				t++;
	}
	if (j - 1 >= 0)//左边
	{
		if (land[i][j - 1][0] == 0)
			a = 1;
		else if (land[i][j - 1][0] == 1)
			t++;
	}
	if (j + 1 < 15)//右边
	{
		if (land[i][j + 1][0] == 0)
			d = 1;
		else if (land[i][j + 1][0] == 1)
			t++;
	}
	if (i + 1 < 15)//下方
	{

		if (j - 1 >= 0)
		{
			if (land[i + 1][j - 1][0] == 0)
				z = 1;
			else if (land[i + 1][j - 1][0] == 1)
				t++;
		}
		if (land[i + 1][j][0] == 0)
			x = 1;
		else if (land[i + 1][j][0] == 1)
			t++;
		if (j + 1 < 15)
			if (land[i + 1][j + 1][0] == 0)
				c = 1;
			else if (land[i + 1][j + 1][0] == 1)
				t++;
	}
	if (t == 0)//点击出四周无雷时递归搜索四周
	{
		if (q != 0 && land[i - 1][j - 1][3] != 1)//q处无雷且未做标记
			scanaround(land, i - 1, j - 1);
		if (w != 0 && land[i - 1][j][3] != 1)//w处无雷且未做标记
			scanaround(land, i - 1, j);
		if (e != 0 && land[i - 1][j + 1][3] != 1)//e处无雷且未做标记
			scanaround(land, i - 1, j + 1);
		if (a != 0 && land[i][j - 1][3] != 1)//a处无雷且未做标记
			scanaround(land, i, j - 1);
		if (d != 0 && land[i][j + 1][3] != 1)//d处无雷且未做标记
			scanaround(land, i, j + 1);
		if (z != 0 && land[i + 1][j - 1][3] != 1)//z处无雷且未做标记
			scanaround(land, i + 1, j - 1);
		if (x != 0 && land[i + 1][j][3] != 1)//x处无雷且未做标记
			scanaround(land, i + 1, j);
		if (c != 0 && land[i + 1][j + 1][3] != 1)//c处无雷且未做标记
			scanaround(land, i + 1, j + 1);
	}
	land[i][j][0] = 3;//本质状态改为揭开
	land[i][j][1] = 10 + t;	//显示的要输出的数
	land[i][j][2] = 0;	//不在此状态
}
void swapwithfront(int a[15][15][5], int i, int j)			//和数组前面的随机元素交换
{
	int c[15][15][3];
	int p = rand() % (i + 1);
	int q = rand() % (j + 1);
	c[p][q][0] = a[p][q][0];
	a[p][q][0] = land[i][j][0];
	land[i][j][0] = c[p][q][0];
}
void shuffle()		//洗牌
{
	srand((unsigned)time(NULL));
	int i = 0, j = 0;
	int num = 0;
	//对本质信息洗牌
	while (num < minenum)			//前minenum位赋值为1
	{
		land[i][j][0] = 1;
		land[i][j][1] = 0;
		land[i][j][2] = 1;
		num++;
		j++;
		if (j == 15)
		{
			j = 0;
			i++;
		}
	}
	while (i < 15)				//剩余位置赋值为0
	{
		land[i][j][0] = 0;
		land[i][j][1] = 0;
		land[i][j][2] = 1;
		j++;
		if (j == 15)
		{
			j = 0;
			i++;
		}
	}
	for (i = 14; i >= 0; i--)
	{
		for (j = 14; j >= 0; j--)
			swapwithfront(land, i, j);
	}
	//对非本质信息初始化
	for (i = 0; i < 15; i++)
	{
		for (j = 0; j < 15; j++)
		{
			land[i][j][1] = 0;
			land[i][j][2] = 1;
			land[i][j][3] = 0;
			land[i][j][4] = 0;
		}
	}
}
void updatewithoutinput()			//无按键时的效果
{
	restmines = minenum - flagnum;//旗数更新
	clock_t now = clock(); // 获得当前时刻
	thetime = (int(now - start) / CLOCKS_PER_SEC);// 计算程序目前一共运行了多少秒
	int p = 0;//记录
	for (int i = 0; i < 15; i++)//遍历
	{
		for (int j = 0; j < 15; j++)
		{
			if (land[i][j][0] == 3)//揭开的
				land[i][j][4] = 1;
			if (land[i][j][4] == 1)
				p++;//计算揭开的地面的个数
			if (p == 225 - minenum)
			{
				EndBatchDraw();//结束批量绘制避免卡住不显示
				settextstyle(100, 0, _T("Consolas"));
				settextcolor(RED);
				outtextxy(100, 200, _T("YOU WIN!"));
				updaterank(thetime);
				while (1)//只可进行选择操作
				{
					hit = GetMouseMsg();//获取一个鼠标信息
					option();
				}
			}
			if (land[i][j][0] == 0 || land[i][j][0] == 1)	//尚未揭开的地面
			{
				if (hit.x >= j * brick && hit.x <= (1 + j) * brick	//获取鼠标范围
					&& hit.y >= i * brick && hit.y <= (i + 1) * brick)
				{

					if (land[i][j][1] != 2 && land[i][j][1] != 3)//不是标记地面
					{
						land[i][j][1] = 5;//表示态改为半开状态
						drawlow(i, j, 10);//绘深地
					}
				}
				else if (land[i][j][1] == 5)	//尚未揭开但半开，需要回到原来的地面显示
				{
					land[i][j][1] = 0;//表示态改为地面
					drawrectangle(i, j);//画地面
				}
			}
		}
	}
}
void updatewithinput()
{
	if (hit.uMsg == WM_RBUTTONDOWN)//右键有输入
	{
		hit = GetMouseMsg();//通过再次获取鼠标信息防止标记一闪而过
		for (int i = 0; i < 15; i++)//遍历
		{
			for (int j = 0; j < 15; j++)
			{
				if (hit.x >= j * brick && hit.x <= (1 + j) * brick		//确定位置
					&& hit.y >= i * brick && hit.y <= (i + 1) * brick)
				{
					if (land[i][j][0] != 2 && (land[i][j][1] == 0 ||
						land[i][j][1] == 1 || land[i][j][1] == 5))	//不是揭开的地面时
					{
						flagnum++;//记录旗数目
						drawrectangle(i, j);//绘格子
						drawflag(i, j);//绘旗
						land[i][j][1] = 2;//表示态改为旗
					}
					else if (land[i][j][0] != 2 && land[i][j][1] == 2)	//不是揭开的旗帜
					{
						flagnum--;//记录旗数目
						drawrectangle(i, j);//绘格子
						drawque(i, j);//绘问号
						land[i][j][1] = 3;//表示态改为问号
					}
					else if (land[i][j][0] != 2 && land[i][j][1] == 3)	//不是揭开的问号
					{
						drawrectangle(i, j);//绘格子
						land[i][j][1] = 0;//表示态改为地面
					}
				}
			}
		}
	}
	else if (hit.uMsg == WM_LBUTTONDOWN)//左键键入
	{

		for (int i = 0; i < 15; i++)//遍历
		{
			for (int j = 0; j < 15; j++)
			{
				if (hit.x >= j * brick && hit.x <= (1 + j) * brick			//确定位置
					&& hit.y >= i * brick && hit.y <= (i + 1) * brick)
				{
					if (land[i][j][0] == 1 && land[i][j][1] != 2 && land[i][j][1] != 3)//按到地雷
					{
						if (steps < 1)//第一下就点到雷时修改
						{
							for (int m = 0; m < 15; m++)
							{
								for (int n = 0; n < 15; n++)
								{
									if (land[m][n][0] == 0)//与第一个不是雷的地方交换
									{
										land[m][n][0] = 1;
										land[i][j][0] = 0;
										break;
									}
								}
							}
						}
						else//其他时候点到地雷
						{
							drawbomb(i, j);//原地爆炸
							EndBatchDraw();//结束批量绘制避免卡住不显示
							bomb();//其他地雷爆炸
							settextstyle(100, 0, _T("Consolas"));
							settextcolor(RED);
							outtextxy(100, 200, _T("YOU LOSE!"));
							while (1)//只可进行选择操作
							{
								hit = GetMouseMsg();//获取一个鼠标信息
								option();
							}
						}
					}
					if (land[i][j][0] == 0 && land[i][j][1] != 2 && land[i][j][1] != 3)//按到地面
					{
						steps++;//步数增加
						scanaround(land, i, j);//对地面进行扫描
					}
				}
			}
		}
	}
}
void draw()
{
	for (int i = 0; i < 15; i++)
	{
		for (int j = 0; j < 15; j++)
		{
			if (land[i][j][2] == 0)//如果还没有显示
			{
				if (land[i][j][0] != 2)	//揭开，画出深景
				{
					land[i][j][2] = 1;//状态已经显示
					drawlow(i, j, land[i][j][1]);//绘出深地
				}
			}

		}
	}
}
void initialize()
{
	start = clock();
	restmines = minenum = 40;
	steps = 0;
	flagnum = 0;
	shuffle();
	drawplaypage();
}
void playpage()//游戏界面
{
	hit = GetMouseMsg();//获取一个鼠标信息
	initialize();//初始化
	whatoption = 2;//更换为第二个菜单
	while (1)
	{
		BeginBatchDraw();//批量绘制
		if (MouseHit())//有鼠标信息
		{

			hit = GetMouseMsg();//获取鼠标信息
			updatewithoutinput();//自动更新
			updatewithinput();//键入更新
			draw();//绘制
			updatemenu();//更新菜单（主要是时间和地雷数的更新）
			option();//菜单时刻可选
		}
		else//无鼠标信息，重复以上步骤保证运行
		{
			updatewithoutinput();//自动更新
			updatewithinput();//键入更新
			draw();//绘制
			updatemenu();//更新菜单（主要是时间和地雷数的更新）
		}
		FlushBatchDraw();//开始批量绘制
	}
}
void option()
{
	if (whatoption == 1)//主页
	{
		if (hit.x >= 280 && hit.x <= 460 && hit.y >= 200 && hit.y <= 240)
			playpage();
		else if (hit.x >= 280 && hit.x <= 460 && hit.y >= 250 && hit.y <= 290)
			rankinglook();
		else if (hit.x >= 280 && hit.x <= 460 && hit.y >= 300 && hit.y <= 340)
			closegraph();
	}
	else if (whatoption == 2)//游戏界面
	{
		if (hit.mkLButton)
		{
			if (hit.x >= 650 && hit.x <= 760 && hit.y >= 200 && hit.y <= 240)
			{
				EndBatchDraw();//开始批量绘制
				playpage();
			}
			else if (hit.x >= 650 && hit.x <= 760 && hit.y >= 300 && hit.y <= 340)
			{
				EndBatchDraw();//开始批量绘制
				startup();
			}
		}
	}

}
void startup()
{
	setbkcolor(RGB(144, 238, 144));
	cleardevice();
	setfillcolor(RGB(139, 137, 137));		//按键颜色
	fillrectangle(280, 200, 460, 240);		//第一个键	
	fillrectangle(280, 250, 460, 290);
	fillrectangle(280, 300, 460, 340);
	settextcolor(RGB(238, 64, 0));
	settextstyle(50, 0, _T("Consolas"));
	setbkmode(TRANSPARENT);						//透明字体
	outtextxy(250, 100, _T("Mine Sweeper"));		//游戏名		
	settextstyle(35, 0, _T("Consolas"));
	settextcolor(RGB(0, 134, 139));
	outtextxy(330, 200, _T("Begin"));		//第一个键
	outtextxy(310, 250, _T("Ranking"));		//第一个键
	outtextxy(340, 300, _T("Exit"));		//第一个键
	while (1)
	{
		hit = GetMouseMsg();				//获取鼠标信息
		if (hit.uMsg == WM_LBUTTONDOWN)//左键
		{
			whatoption = 1;
			option();
		}
	}
}
int main(void)
{
	initgraph(WIDTH, HEIGHT, EW_SHOWCONSOLE);// 绘图窗口初始化
	startup();//开始界面
	return 0;
}